import java.util.PriorityQueue;
import java.util.Queue;

public class Test {
    public int[] maxK(int[] arr, int k) {
        int[] ret = new int[k];
        if(arr == null || k == 0) {
            return ret;
        }

        Queue<Integer> minHeap = new PriorityQueue<>(k);

        //1、遍历数组的前K个 放到堆当中
        for (int i = 0; i < k; i++) {
            minHeap.offer(arr[i]);
        }
        //2、遍历剩下的array.length-k个，每次和堆顶元素进行比较
        for (int i = k; i < arr.length; i++) {
            if(minHeap.peek()<arr[i]) {
                minHeap.poll();
                minHeap.offer(arr[i]);
            }
        }
        for (int i = 0; i < k; i++) {
            ret[i]=minHeap.poll();
        }
        // 堆顶元素 小的时候，就出堆。
        return ret;

    }
}
